package com.chukun.gateway.core.request;

import io.netty.handler.codec.http.cookie.Cookie;
import org.asynchttpclient.Request;

/**
 * @author chukun
 * @version 1.0.0
 * @description 提供可修改的Request参数操作接口
 * @createTime 2023/11/19 21:24
 */
public interface IGatewayRequest {

    /**
     * 目标服务的地址
     * @param host 主机名
     */
    void setModifyHost(String host);

    /**
     *
     * @return 有修改就会有获取，获取方法
     */
    String getModifyHost();

    /**
     *
     * @param path 目标地址，需要组装最后的请求
     */
    void setModifyPath(String path);

    /**
     *
     * @return 需要获取路径path
     */
    String getModifyPath();

    /**
     * 添加请求头信息
     **/
    void addHeader(CharSequence name, String value);

    /**
     * 以及设置请求头
     */
    void setHeader(CharSequence name, String value);

    /**
     * get请求添加参数
     */
    void addQueryParam(String name, String value);
    /**
     * 有些参数是表单模式的，此时也需要提供该种类型的支持
     */
    void addFormParam(String name, String value);

    /**
     * 替换Cookie
     */
    void addOrReplaceCookie(Cookie cookie);

    /**
     * 超时时间也是很重要的一个属性，这时需要设置
     */
    void setRequestTimeout(int requestTimeout);

    /**
     *
     * @return 各种参数都组装好了以后，需要知道最终的请求路径
     */
    String getFinalUrl();

    /**
     *
     * @return 构建转发请求的请求对象
     */
    Request build();
}
